// This tab contains support functions

// ***************************************************************
// formatMillisShort(int m)
// returns the time m in "millis" as a string in "hh:mm:ss" format
String formatMillisShort(int m) {
  int s = m / 1000;
  int mn = s / 60;
  s -= (60 * mn);
  int h = mn / 60;
  mn -= 60 * h;
  
  String hh = str(h);
  String mm = str(mn);
  String ss = str(s);
  if (h < 10) hh = "0" + hh;
  if (mn < 10) mm = "0" + mm;
  if (s < 10) ss = "0" + ss;

  return hh + ":" + mm + ":" + ss;
}

// ***************************************************************
// formatMillis(int m)
// returns the time m in "millis" as a string in "hh:mm:ss.sss" format
String formatMillis(int m) {
  
  int s = m / 1000;
  int ms = m - (1000 * s);
  String mms = str(ms);
  if (ms < 10) {
    mms = "00" + mms;
  } else if (ms < 100) {
    mms = "0" + mms;
  }
  
  return formatMillisShort(m) + "." + mms;
}

// ***************************************************************
// timeString()
// returns the current computer clock time as a String in "hh:mm:ss" format
String timeString() {
  int s = second();
  int m = minute();
  int h = hour();
  
  String t = "";
  if (h < 10) t += '0';
  t += str(h) + ':';
  if (m < 10) t += '0';
  t += str(m) + ':';
  if (s < 10) t += '0';
  t += str(s);
  
  return t;
}

String dateTime() {
  String mm[] = {"Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec"};
  return timeString() + " " + str(day()) + " " + mm[month()] + " " + str(year());
}

// ***************************************************************
// redBox(GTextField)
// draws a red box around the input GTextField
void redBox(GTextField c) {
  int x = int(c.getX());
  int y = int(c.getY());
  int h = int(c.getHeight());
  int w = int(c.getWidth());
  
  noFill();
  stroke(255, 0, 0);
  strokeWeight(2);
  rect(x-2, y-2, w+4, h+4);
  strokeWeight(1);
  stroke(0);
}



void testEnable(boolean b) {
  armButton.setEnabled(b);
  recButton.setEnabled(b);
  if (b) {
    armButton.setAlpha(enabledAlpha);
    recButton.setAlpha(enabledAlpha);
  } else {
    armButton.setAlpha(disableAlpha);
    recButton.setAlpha(disableAlpha);
  }
}

void armEnable(boolean b) {
  fet1Button.setEnabled(b);
  fet2Button.setEnabled(b);
    if (b) {
    fet1Button.setAlpha(enabledAlpha);
    fet2Button.setAlpha(enabledAlpha);
  } else {
    fet1Button.setAlpha(disableAlpha);
    fet2Button.setAlpha(disableAlpha);
  }

}

boolean isInt(String s) {
  boolean ok = s.length() > 0;
  char theChar;

  for (int i = 0; i < s.length(); i++) {
    theChar = s.charAt(i);
    if (((theChar < '0') || (theChar > '9')) && (theChar != '.')) ok = false;
  }
  return ok;
}

void disableControls() {
  testEnable(false);
  armEnable(false);
  testButton.setEnabled(false);
  mainCheck.setEnabled(false); 
  deployCheck.setEnabled(false); 
  stageCheck.setEnabled(false); 
  chutePinCheck.setEnabled(false);
  setAltButton.setEnabled(false); 
  setMainButton.setEnabled(false); 
  setGoAltButton.setEnabled(false); 
  setStageAltButton.setEnabled(false); 
  refreshButton.setEnabled(false); 
  launchButton.setEnabled(false); 
  holdButton.setEnabled(false); 
  sensorButton.setEnabled(false); 
  accelButton.setEnabled(false); 
  flightButton.setEnabled(false); 
  annotateButton.setEnabled(false);
  zeroAGLbutton.setEnabled(false);
  
  testButton.setAlpha(disableAlpha);
  mainCheck.setAlpha(disableAlpha); 
  deployCheck.setAlpha(disableAlpha); 
  stageCheck.setAlpha(disableAlpha); 
  chutePinCheck.setAlpha(disableAlpha);
  setAltButton.setAlpha(disableAlpha); 
  setMainButton.setAlpha(disableAlpha); 
  setGoAltButton.setAlpha(disableAlpha); 
  setStageAltButton.setAlpha(disableAlpha); 
  refreshButton.setAlpha(disableAlpha); 
  launchButton.setAlpha(disableAlpha); 
  holdButton.setAlpha(disableAlpha); 
  sensorButton.setAlpha(disableAlpha); 
  accelButton.setAlpha(disableAlpha); 
  flightButton.setAlpha(disableAlpha); 
  annotateButton.setAlpha(disableAlpha);
  zeroAGLbutton.setAlpha(disableAlpha);
}

void enableControls() {
  testButton.setEnabled(true);
  mainCheck.setEnabled(true); 
  deployCheck.setEnabled(true); 
  stageCheck.setEnabled(true); 
  chutePinCheck.setEnabled(true);
  setAltButton.setEnabled(true); 
  setMainButton.setEnabled(true); 
  setGoAltButton.setEnabled(true); 
  setStageAltButton.setEnabled(true); 
  refreshButton.setEnabled(true); 
  launchButton.setEnabled(true); 
  holdButton.setEnabled(true); 
  sensorButton.setEnabled(true); 
  accelButton.setEnabled(true); 
  flightButton.setEnabled(true); 
  annotateButton.setEnabled(true);
  zeroAGLbutton.setEnabled(true);
  
  testButton.setAlpha(enabledAlpha);
  mainCheck.setAlpha(enabledAlpha); 
  deployCheck.setAlpha(enabledAlpha); 
  stageCheck.setAlpha(enabledAlpha); 
  chutePinCheck.setAlpha(enabledAlpha);
  setAltButton.setAlpha(enabledAlpha); 
  setMainButton.setAlpha(enabledAlpha); 
  setGoAltButton.setAlpha(enabledAlpha); 
  setStageAltButton.setAlpha(enabledAlpha); 
  refreshButton.setAlpha(enabledAlpha); 
  launchButton.setAlpha(enabledAlpha); 
  holdButton.setAlpha(enabledAlpha); 
  sensorButton.setAlpha(enabledAlpha); 
  accelButton.setAlpha(enabledAlpha); 
  flightButton.setAlpha(enabledAlpha); 
  annotateButton.setAlpha(enabledAlpha);
  zeroAGLbutton.setAlpha(enabledAlpha);
}
